package com.xiaohong.account.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * Swagger配置
 */
@Configuration
public class SwaggerConfig {
// swagger3+OpenAPI3

//    @Bean
//    public GroupedOpenApi AccountApi() {
//        return GroupedOpenApi.builder()
//                .group("account")
//                .pathsToMatch("/accountTbl/**")
//                .build();
//    }


    @Bean
    public OpenAPI springShopOpenAPI(@Value("${springdoc.version}") String appVersion) {

//        SecurityRequirement securityRequirement = new SecurityRequirement().addList("test"); // 名字和创建的SecuritySchemes一致
//        List<SecurityRequirement> list = new ArrayList<>();
//        list.add(securityRequirement);

        return new OpenAPI()
                .components(new Components()
                        .addSecuritySchemes("Authorization", // key值，对应接口上方的name
                            new SecurityScheme()
                                    .type(SecurityScheme.Type.APIKEY) //请求认证类型
                                    .name("token") //密钥名称
                                    .description("token令牌1") //描述
                                    .in(SecurityScheme.In.HEADER)
                                )//API密钥的位置。有效值"query","header"或"cookie"
                        .addSecuritySchemes("Authorization2", // key值
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP) //请求认证类型
                                        .description("token令牌2") //描述
                                        .scheme("bearer") // 在RFC7235中定义的Authorization标头中使用的HTTP Authorization方案的名称
                                        .bearerFormat("JWT")) //向客户端提示以标识承载令牌的格式。承载令牌通常由授权服务器生成，因此此信息主要用于文档目的。
                        .addSecuritySchemes("Authorization3", // key值
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP) //请求认证类型
                                        .name("Authorization3") //标题
                                        .description("token令牌3") //描述
                                        .scheme("basic")) // 在RFC7235中定义的Authorization标头中使用的HTTP Authorization方案的名称
                )
                .info(new Info().title("账户微服务接口文档")
                        .description("这是接口文档描述,下面是服务条款地址，最下面是许可证地址,你可以点[这里](http://www.xiaohong.work)进官网")
                        .termsOfService("http://swagger.io/terms/")
                        .version(appVersion)
                        .license(new License().name("小鸿").url("http://www.xiaohong.work")));
    }




}
